package com.lu.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lu.constants.ConfigConstants;
import com.lu.constants.HttpStatusEnum;
import com.lu.constants.SessionConstants;
import com.lu.dto.Result;
import com.lu.pojo.AdminUser;

import com.lu.service.AdminUserService;
import com.lu.service.BlogConfigService;
import com.lu.utils.MD5Utils;
import com.lu.utils.ResultGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpSession;


/**
 * <p>
 * 后台管理员信息表 前端控制器
 * </p>
 *
 * @author xiaolu
 * @since 2020-05-27
 */
@Controller
@RequestMapping("/admin")
public class AdminUserController {

    @Autowired
    private AdminUserService adminUserService;
    @Autowired
    private BlogConfigService blogConfigService;


    // 跳转到登录页面
    @GetMapping(value = {"","/v1/login"})
    public String login(){
        return "admin/login";
    }

    // 登录验证
    @ResponseBody // 该方法的返回的结果直接写入 HTTP 响应正文中，一般在异步获取数据时使用；
    @PostMapping(value = {"","/v1/login"})
    public Result<String> login(String username, String password,
                                 HttpSession session){

        // 查询用户名和密码是否为空，为空返回400
        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){
            return ResultGenerator.getResultByHttp(HttpStatusEnum.BAD_REQUEST);
        }
        // 封装对象
        QueryWrapper<AdminUser> queryWrapper = new QueryWrapper<>(
                new AdminUser().setLoginUserName(username)
                        .setLoginPassword(MD5Utils.MD5Encode(password, "UTF-8"))
        );
        // 查询这个user是否存在，如果存在存入session，不存在返回响应状态401
        AdminUser adminUser = adminUserService.getOne(queryWrapper);
        if (adminUser != null){
            session.setAttribute(SessionConstants.LOGIN_USER_ID, adminUser.getAdminUserId());
            session.setAttribute(SessionConstants.LOGIN_USER, adminUser.getNickName());
            session.setAttribute(SessionConstants.LOGIN_USER_Name, adminUser.getLoginUserName());
            session.setAttribute(SessionConstants.AUTHOR_IMG, blogConfigService.getById(
                    ConfigConstants.AUTHOR_IMG.getConfigField()));

            // 登录成功，后台跳转到index
            return ResultGenerator.getResultByHttp(HttpStatusEnum.OK,"/admin/v1/index");
        }else {// 登录失败
            return ResultGenerator.getResultByHttp(HttpStatusEnum.UNAUTHORIZED);
        }
    }

    // 注销登录
    @GetMapping("/v1/logout")
    public String logout(HttpSession session) {

        session.invalidate();
        return "admin/login";
    }

    // 跳转到后台首页
    @GetMapping("/v1/index")
    public String index(){

        return "admin/index";
    }

    // 跳转到个人信息页面
    @GetMapping("/v1/userInfo")
    public String userInfo(){

        return "admin/userInfo-edit";
    }

    // 修改个人信息成功，返回登录首页
    @PostMapping("/v1/userInfo")
    @ResponseBody
    public Result<String> userInfo(String userName, String nickName, String newPwd, HttpSession session){

        // 如果新密码和昵称为空，返回400
        if (StringUtils.isEmpty(newPwd) || StringUtils.isEmpty(nickName)){
            return ResultGenerator.getResultByHttp(HttpStatusEnum.BAD_REQUEST);
        }
        // 从session中获取用户id
        int userId = (int) session.getAttribute(SessionConstants.LOGIN_USER_ID);
        // 获取用户输入的新信息
        AdminUser user = new AdminUser()
                .setAdminUserId(userId)
                .setLoginUserName(userName)
                .setNickName(nickName)
                .setLoginPassword(MD5Utils.MD5Encode(newPwd, "UTF-8"));
        // 如果更新成功，清空session中的数据，跳转至登录页
        if (adminUserService.updateUserInfo(user)){
            return ResultGenerator.getResultByHttp(HttpStatusEnum.OK, "/admin/v1/logout");
        }else {
            return ResultGenerator.getResultByHttp(HttpStatusEnum.INTERNAL_SERVER_ERROR);
        }
    }

    // 修改密码时，旧密码验证
    @GetMapping("/v1/password")
    @ResponseBody
    public Result<String> validatePassword(String oldPwd, HttpSession session){

        // 从session中获取用户id
        Integer userId = (Integer) session.getAttribute(SessionConstants.LOGIN_USER_ID);
        boolean flag = adminUserService.validatePassword(userId, oldPwd);
        if (flag){
            return ResultGenerator.getResultByHttp(HttpStatusEnum.OK);
        }
        return ResultGenerator.getResultByHttp(HttpStatusEnum.BAD_REQUEST);
    }


    // 用户头像上传



    // 跳转到welcome页面
    @GetMapping("/v1/welcome")
    public String welcome(){
        return "admin/1";
    }

    @ResponseBody
    @GetMapping("/v1/reload")
    public boolean reload(HttpSession session){
        Integer userId = (Integer) session.getAttribute(SessionConstants.LOGIN_USER_ID);
        return userId != null && userId != 0;
    }

}

